package persistencia;
 
 

import java.sql.*;
import java.util.Vector;
 
public class Agente {
    //instancia del agente
    protected static Agente mInstancia=null;
    //Conexion con la base de datos
    protected static Connection mBD;
    
  
    private String url;
    private String usuario;
    private String clave; 
    
    private String driver;
     
    //Constructor
    private Agente(String driver,String url,String usuario,String clave)throws Exception {
    	this.driver=driver;
    	this.url=url;
    	this.usuario=usuario;
    	this.clave=clave;
        conectar();
             
    }
     

    //http://es.wikipedia.org/wiki/Singleton
     public static Agente getAgente(String driver,String url,String usuario,String clave) throws Exception{
          if (mInstancia==null){
          mInstancia=new Agente(driver,url,usuario,clave);
        }
        return mInstancia;
     }
  
    //Metodo para realizar la conexion a la base de datos 
    private void conectar() throws Exception {
         Class.forName(driver);
         mBD=DriverManager.getConnection(url,usuario,clave);
    }
 
     
    //Metodo para desconectar de la base de datos
    public void desconectar() throws Exception{
        mBD.close();
    }
 

    public int ejecutar(String SQL) {
    	try{
    	Statement st=mBD.createStatement();
    	st.executeUpdate(SQL);
    	st.close();
    	}catch (SQLException e){
    		e.printStackTrace();
    	}
    	return 1;
    }
    
    public Vector tablas() {
    	DatabaseMetaData metadata = null;
		try {
			metadata = mBD.getMetaData();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	ResultSet rs = null;
		try {
			rs = metadata.getTables(null, null, null, null);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	Vector <String> tablas=new Vector();
    	try {
			while(rs.next()){
				tablas.add(rs.getString(3));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return tablas;
    }
     
     
    public Vector<Object> select(String tabla,String columnas[]) {
        
    	Statement st = null;
		try {
			st = mBD.createStatement();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    	String SQL="select * from "+tabla;

    	ResultSet rs = null;
		try {
			rs = st.executeQuery(SQL);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 

        Vector<Object> v=new Vector<Object>();
        Vector<Object> aux;
        
                try {
					while (rs.next()) {
						aux=new Vector<Object>();
						for(String i:columnas){
							aux.add((String)rs.getString(i));	
						}                                      
					    v.add((Vector)aux);
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}   
         
        return v;
    }
     
      
     
}